﻿-----------------------------------------------------------------------------------------------
----------------------------------------pca.usuarios-------------------------------------------
-----------------------------------------------------------------------------------------------

CREATE OR REPLACE FUNCTION pca.fn_add_usuario(varchar,--empresa_id $1
					      varchar,--oficina_id $2
					      character --usuario_id $3
					      )RETURNS void AS
$$
BEGIN
	INSERT INTO pca.usuarios
		(empresa_id,
		oficina_id,
		usuario_id)
	VALUES
		($1,$2,$3);
END;
$$
LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION pca.fn_del_usuario(varchar,--empresa_id $1
					      varchar,--oficina_id $2
					      character --usuario_id $3
					      )RETURNS void AS
$$
BEGIN
	DELETE FROM
		pca.usuarios
	WHERE
		empresa_id=$1 AND
		oficina_id=$2 AND
		usuario_id=$3;
END;
$$
LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION pca.fn_get_usuario(varchar,--empresa_id $1
					      varchar,--oficina_id $2
					      character --usuario_id $3
					      )RETURNS SETOF pca.vw_usuarios AS
$$
DECLARE
	_row pca.vw_usuarios%ROWTYPE;
BEGIN
	FOR _row IN
		SELECT
			*
		INTO
			_row
		FROM
			pca.vw_usuarios	
		WHERE
			empresa_id=$1 AND
			oficina_id=$2 AND
			usuario_id=$3
	LOOP
		RETURN NEXT _row;
	END LOOP;
END;
$$
LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION pca.fn_get_list_usuarios(varchar,--empresa_id $1
						    varchar --oficina_id $2
						    )RETURNS SETOF pca.vw_usuarios AS
$$
DECLARE
	_row pca.vw_usuarios%ROWTYPE;
BEGIN
	FOR _row IN
		SELECT
			*
		FROM
			pca.vw_usuarios
		WHERE
			empresa_id = $1 AND
			oficina_id = $2
	LOOP
		RETURN NEXT _row;
	END LOOP;
END;
$$
LANGUAGE plpgsql;

-- Devuelve una lista de usuarios libres para una determinada oficina
CREATE OR REPLACE FUNCTION pca.fn_get_list_usuarios_libres(varchar,--empresa_id $1
							   varchar --oficina_id $2
							    )RETURNS SETOF pca.usuarios AS
$$
DECLARE
	_row pca.vw_usuarios%ROWTYPE;
BEGIN
	FOR _row IN
		SELECT 
			''::varchar AS oficina_id,
			''::varchar AS empresa_id,
			"pId" AS usuario_id
		FROM
			pca_membership."Users"
		WHERE
			"pId" <> ALL (SELECT
					usuario_id
				      FROM
					pca.usuarios
				      WHERE
					empresa_id = $1 AND
					oficina_id = $2)
	LOOP
		RETURN NEXT _row;
	END LOOP;
END;
$$
LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION pca.fn_get_list_usuario_empresas(character --usuario_id $1
							    )RETURNS SETOF pca.vw_usuarios_empresas AS
$$
DECLARE
	_row pca.vw_usuarios_empresas%ROWTYPE;
BEGIN
	FOR _row IN
		SELECT
			DISTINCT ON (empresa_id)
			*
		FROM
			pca.vw_usuarios_empresas
		WHERE
			usuario_id=$1
		ORDER BY
			empresa_id
	LOOP
		RETURN NEXT _row;
	END LOOP;
END;
$$
LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION pca.fn_get_list_usuario_oficinas(character, --usuario_id $1
							    varchar --empresa_id
							    )RETURNS SETOF pca.vw_usuarios_empresas AS
$$
DECLARE
	_row pca.vw_usuarios_empresas%ROWTYPE;
BEGIN
	FOR _row IN
		SELECT
			*
		FROM
			pca.vw_usuarios_empresas
		WHERE
			usuario_id = $1 AND
			empresa_id = $2
		ORDER BY
			oficina_id
	LOOP
		RETURN NEXT _row;
	END LOOP;
END;
$$
LANGUAGE plpgsql;

